要改變目前commit的狀態
有git reset 及 git revert 兩種指令可以使用
reset
revert
範例:
假設目前master上有一個313b3bd7ddaf3ea5b4efa95279342ab0d99789ed Bug fixed的commit要revert
我們可以下指令
$ git revert 313b3bd
error: could not revert 313b3bd... Bug fixed
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
如果下完revert後的結果跟我一樣
就是有衝突要合併
一樣對有衝突的檔案做衝突合併
合併完就可以利用git add , git commit來繼續revert作業
$ git commit
[master f2b286a] Revert "Bug fixed"
1 file changed, 3 deletions(-)
commit完的線圖如下
接著就可以push到remote上
push 後的線圖如下
如此一來最新的commit就會不包含我們希望revert掉的「Bug fixed」 commit
git reset
會動到commit history
rest我覺得像是砍掉重練,他會直接reset到指定的commit的狀態,讓你可以從這個commit開始開發
實務上:我常常會用在自己解問題時加了一堆測試程式,或是log輸出,最後問題解掉時,把解掉的部分記起來,
reset回上一個commit的版本後再將解掉問題的程式碼貼回來
git revert
不會動到commit history
可以抽掉不想要的commit,而不會動到其他commit上去的部分
實務上:還沒使用過,不過覺得應該可以用在發現有哪一個版本是有問題的時候,將該版本從分支中revert掉